Déclencheurs
Commandes
Checkpoints
Menus
JSON
Redéfinition (override) de méthodes
Certaines méthodes peuvent être redéfinies par des méthodes personnalisées. Pour qu’une méthode puisse être redéfinie, elle doit impérativement être déclarée avec l’attribut virtual
.
Redéfinition
Prenons l’exemple de la méthode déclenchée lors de la consommation d’alcool par un joueur :
public virtual void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue) { }
La redéfinition est plus simple qu’un abonnement à une action car la correspondance des paramètres est déjà indiquée dans la fonction de base.
Type de paramètre | Correspondance |
---|---|
player | Le joueur qui consomme de l’alcool |
itemId | L’identifiant de l’objet consommé |
alcoholValue | La quantité d’alcool consommée |
Il ne nous reste plus qu’à créer la même fonction, avec le même nom et les mêmes paramètres, et à lui appliquer l’attribut override
:
public override void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue) { }
Grâce à override
, cette nouvelle fonction remplacera celle définie dans la classe de base, et l’ancienne version ne sera plus exécutée.
Exécution de la méthode de base
Si vous souhaitez que la méthode originale s’exécute en complément, vous devez appeler explicitement la méthode de base avec :
base.OnPlayerConsumeAlcohol(player, itemId, alcoholValue);
Cela permet de conserver le comportement défini dans la classe parente avant ou après l’exécution du code personnalisé.
Exemple
public override void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue)
{
Debug.Log("Ce message apparaît avant l'exécution de la méthode de base");
base.OnPlayerConsumeAlcohol(player, itemId, alcoholValue);
Debug.Log("Ce message apparaît après l'exécution de la méthode de base");
}
Dans cet exemple :
- Le premier
Debug.Log
s’affichera en premier - La méthode de base
OnPlayerConsumeAlcohol
sera exécutée - Le deuxième
Debug.Log
s’affichera en dernier